package com.ssyt.yt1.day27;

/**
 * 过多同步容易发生死锁 <br>
 * 面试题：多线程操作时，我们要操作哪些情况？1、共享资源私有并要同步；2、过多的同步容易发生死锁
 *
 * @author Hsu.
 * @since 2015年12月31日
 */
public class DeadLockDemo extends Thread {

	private static Zhangsan zhangsan = new Zhangsan();
	private static Lisi lisi = new Lisi();

	@Override
	public void run() {
		zhangsan.say(lisi);
	}

	public static void main(String[] args) {
		new DeadLockDemo().start();
		// 1、锁的是谁？2、谁拿的锁
		// 原则：A线程拿到一个对象的锁后，B线程必须要等待A线程把这个对象释放后才能访问！
		lisi.say(zhangsan);
	}
}

class Zhangsan {

	public synchronized void say(Lisi lisi) {
		System.out.println("张三：你把钱给我，我就把货给你！");
		lisi.get();
	}

	public synchronized void get() {
		System.out.println("张三得到了钱！");
	}

}

class Lisi {

	public synchronized void say(Zhangsan zhagnsan) {
		System.out.println("李四：你把货给我，我就把钱给你！");
		zhagnsan.get();
	}

	public synchronized void get() {
		System.out.println("李四得到了货！");
	}
}